
#ifndef GOMOKU_CORE_IPLAYER_H__
# define GOMOKU_CORE_IPLAYER_H__

# include <gomoku/core/Gomoku.h>

namespace gomoku
{
    // forward declaration
    class IReferee;

    class IPlayer
    {
    public:
        virtual void connectReferee(IReferee *) = 0;
        // STATE game

        // Color -> Black or White
        virtual Color color() const = 0;
        virtual void setColor(Color) = 0;

        // Type -> Human or CPU
        virtual PlayerType type() const = 0;
        virtual void setType(PlayerType) = 0;

        // think is call only for CPU player
        // else gui->think call by referee
        virtual Move think() = 0;
        virtual void updateGoban(Move const &) = 0;
    };
}

#endif  // GOMOKU_CORE_IPLAYER_H__
